﻿#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char arr1[] = "abcdef";
//	size_t ret =strlen(arr1);
//	char arr2[] = "abc\0def";
//	size_t r = strlen(arr2);
//	printf("arr1=%d,arr1=%d", ret, r);
//	return 0;
//}

//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	//          3                 6       
//	if (strlen("abc") - strlen("abcdef") > 0)//正数，3为无符号数是一个很大的数
//	{
//		printf(">\n");
//	}
//	else
//	{
//		printf("<\n");
//	}
//	return 0;
//}


//strlen的模拟实现
//指针_指针
//#include<stdio.h>
//size_t my_strlen(char* p)
//{
//	int count = 0;
//	while (*p)
//	{
//		count++;
//		p++;
//	}
//	return count;
//}
//int main()
//{
//	char arr[] = "abcdef";
//	size_t ret = my_strlen(arr);
//	printf("%zd\n", ret);
//	return 0;
//}
//
//






//#include<stdio.h>
//size_t my_strlen(char* str)//把数组第一个字符地址传过去
//{
//	int count = 0;
//	while (*str != '\0')
//	{
//		str++;
//		count++;
//	}
//	return count;
//}
//#include<stdio.h>
//int main()
//{
//	char arr[] = "abc";
//	size_t str = my_strlen(arr);//编写函数求字符串长度
//	printf("%zd", str);
//	return 0;
//}


//递归
//#include<stdio.h>
//size_t my_strlen(const char* p)
//{
//	if (*p == '\0')
//		return 0;
//	else
//	{
//		return 1 + my_strlen(p+1);//切记不要p++,++p这种副作用的++
//	}
//}
//int main()
//{
//	char arr[] = "abcdef";
//	size_t ret = my_strlen(arr);
//	printf("%zd", ret);
//	return 0;
//}





//#include<stdio.h>
//int main()
//{
//	char arr1[20] = { 0 };
//	char arr2[] = "abcdef";
//	strcpy(arr1, arr2);
//	printf("%s", arr1);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	char arr1[1] = "hijklem";
//	char arr2[] = "abcdef";
//	strcpy(arr1, arr2);
//	printf("%s", arr1);
//	return 0;
//}


//模拟实现strcpy
//#include<stdio.h>
//#include<assert.h>
//char* my_strcpy( char*dest,  const char* src)
//{
//	char* ret = dest;
//	assert(dest && src);
//
//	while (*dest++ == *src++)
//	{
//		;
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[20] = {0};
//	char arr2[] = "abcdef";
//	printf("%s\n", my_strcpy(arr1, arr2));//链式访问
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	char arr1[20] = "abc";
//	char arr2[20] = "defg";
//	strcat(arr1, arr2);
//	printf("%s\n", arr1);
//	return 0;
//}


//#include<stdio.h>
//char* my_strcat(char* str1, const char* str2)
//{
//	char* ret = str1;
//	while (*str1)
//	{
//		str1++;
//	}
//	while (*str2 != '\0')
//	{
//		
//			*str1++ = *str2++;
//	}
//	return ret;
//}
//
//int main()
//{
//	char arr1[20] = "abc";
//	char arr2[20] = "defg";
//	my_strcat(arr1, arr1);
//	printf("%s\n", arr1);
//	return 0;
//}

//
//#include<stdio.h>
//int main()
//{
//	char arr1[20] = "abc";
//	strcat(arr1, arr1);
//	printf("%s\n", arr1);
//	return 0;
//}



//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char arr1[] = "abz";
//	char arr2[] = "abq";
//	if (strcmp(arr1, arr2) > 0)
//	{
//		printf(">\n");
//	}
//	else if(strcmp(arr1, arr2) < 0)
//	{
//		printf("<\n");
//	}
//	else
//	{
//		printf("=\n");
//	}
//	printf("%d", strcmp(arr1, arr2));//不同编译器下的值不同，但是都是以><=0的范围。
//	return 0;
//}



//#include<stdio.h>
//#include<string.h>
//int my_strcmp(char* p1, char* p2)
//{
//	while (*p1 == *p2)
//	{
//		if (*p1 == '\0')
//			return 0;
//		p1++;
//		p2++;
//	}
//	!=
//	if (*p1 > *p2)
//		return 1;
//	else
//		return -1;
//}
//int main()
//{
//	char arr1[] = "abz";
//	char arr2[] = "abq";
//	if (my_strcmp(arr1, arr2) > 0)
//	{
//		printf(">\n");
//	}
//	else if(my_strcmp(arr1, arr2) < 0)
//	{
//		printf("<\n");
//	}
//	else
//	{
//		printf("=\n");
//	}
//	printf("%d", my_strcmp(arr1, arr2));//不同编译器下的值不同，但是都是以><=0的范围。
//	return 0;
//}


//#include<stdio.h>
//#include<string.h>
//int my_strcmp(char* p1, char* p2)
//{
//	while (*p1 == *p2)
//	{
//		if (*p1 == '\0')
//			return 0;
//		p1++;
//		p2++;
//	}
//	//!=
//		return (*p1-*p2);
//}
//int main()
//{
//	char arr1[] = "abz";
//	char arr2[] = "abq";
//	if (my_strcmp(arr1, arr2) > 0)
//	{
//		printf(">\n");
//	}
//	else if (my_strcmp(arr1, arr2) < 0)
//	{
//		printf("<\n");
//	}
//	else
//	{
//		printf("=\n");
//	}
//	printf("%d", my_strcmp(arr1, arr2));//不同编译器下的值不同，但是都是以><=0的范围。
//	return 0;
//}


//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	//        3                 6
//	if (strlen("abc") - strlen("abcdef") > 0)//正数
//		printf(">\n");
//	else
//		printf("<\n");
//	return 0;
//}


//#include<stdio.h>
//int my_strlen(char* p)
//{
//	char* r = p;//起始地址
//	while (*p != '\0')
//	{
//		p++;
//	}
//	return p - r;
//}
//int main()
//{
//	char arr[] = "abcdef";
//	int ret=my_strlen(arr);
//	printf("%d", ret);
//	return 0;
//}



//#include<stdio.h>
//#include<assert.h>
//char* my_strcpy(char* dest, const char* src)
//{
//	char* ret = dest;//为了返回目标空间字符串的起始地址，需要先存储起来
//	assert(dest && src);//断言
//
//	while (*src != '\0')
//	{
//		*dest = *src;
//		dest++;
//		src++;
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[20] = { 0 };
//	char arr2[] = "abcdef";
//	my_strcpy(arr1, arr2);
//	printf("%s\n", arr1);
//	return 0;
//}



//#include<stdio.h>
//#include<assert.h>
//char* my_strcpy(char* dest, const char* src)
//{
//	char* ret = dest;//为了返回目标空间字符串的起始地址，需要先存储起来
//	assert(dest && src);//断言
//
//	while (*dest++ = *src++)
//	{
//		;
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[20] = { 0 };
//	char arr2[] = "abcdef";
//	my_strcpy(arr1, arr2);
//	printf("%s\n", arr1);
//	return 0;
//}

//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char a[20] = {0};
//	char arr[] = "abcdef";
//	strncpy(a, arr, 3);
//	printf("%s",a);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	char arr[10] = "abc\0def";
//	printf("%s\n", arr);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	char arr1[20] = "xxxxxxxxxxxxxx";
//	char arr2[] = "abcdef";
//	strncpy(arr1, arr2,3);
//	printf("%s\n", arr1);
//	strcpy(arr1, arr2);
//	printf("%s", arr1);
//	return 0;
//}



//#include<stdio.h>
//int main()
//{
//	char arr1[20] = "xxxxxxxxxxxxxx";
//	char arr2[] = "abc";
//	strncpy(arr1, arr2, 6);
//	printf("%s\n", arr1);
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	char arr1[20] = "abcxxxxxxxxxx";
//	char arr2[] = "defghi";
//	strncat(arr1, arr2, 3);
//	printf("%s\n", arr1);
//	return 0;
//}
//
//
//#include<stdio.h>
//int main()
//{
//	char arr1[20] = "abc\0xxxxxxxxxx";
//	char arr2[] = "defghi";
//	strncat(arr1, arr2, 10);
//	printf("%s\n", arr1);
//	return 0;
//}



//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char arr1[] = "abczef";
//	char arr2[] = "abcqw";
//	int ret = strncmp(arr1, arr2, 4);
//	printf("%s\n", ret);
//	return 0;
//}


//
//#include<stdio.h>
//#include<string.h>
//#include<assert.h>
//char* my_strcat(char* str1, const char* str2)
//{
//	assert(str1 && str2);//断言
//	//strcat函数返回的是目标空间的起始地址
//	char* ret = str1;
//	//1，找到目标空间的末尾
//	while (*str1 != '\0')
//		//	while (*str1++)❌
//		//后置++ 先使用  再*
//	{
//		str1++;
//	}
//	//2。数据追加
//	while (*str1++ = *str2++)
//		//后置++的规则
//	{
//		;
//	}
//	return ret;
//}
//
//int main()
//{
//	char arr1[20] = "abc";
//	char arr2[20] = "defg";
//	my_strcat(arr1, arr2);
//	printf("%s\n", arr1);
//	return 0;
//}



//#include<stdio.h>
//#include<string.h>
//#include<assert.h>
//int my_strcmp( const char* p1, const char* p2)
//{
//	assert(p1 && p2);
//	while (*p1 == *p2)
//	{
//		if (*p1 == '\0')
//			return 0;
//		p1++;
//		p2++;
//	}
//	//!=
//	return *p1 - *p2;
//}
//int main()
//{
//	char arr1[] = "abz";
//	char arr2[] = "abq";
//	if (my_strcmp(arr1, arr2) > 0)
//	{
//		printf(">\n");
//	}
//	else if (my_strcmp(arr1, arr2) < 0)
//	{
//		printf("<\n");
//	}
//	else
//	{
//		printf("=\n");
//	}
//	printf("%d", my_strcmp(arr1, arr2));//不同编译器下的值不同，但是都是以><=0的范围。
//	return 0;
//}


//#include<stdio.h>
//#include<strng.h>
//#include<assert.h>
//void* my_memmove(void* p1, void* p2，size_t num)
//{
//	assert(p1 && p2);
//	void* ret = p1;
//	//p1在p2的前面从后往前拷贝
//	if (p1 < p2)
//	{
//		while (num--)
//		{
//			*(char*)p1 = *(char*)p2;
//			p2 = (char*)p2 + 1;
//			p1 = (char*)p1 + 1;
//		}
//	}
//	//p1在p2的后面从后往前拷贝
//	else
//	{
//		while (num--)
//		{
//			*((char*)p1 + num) = *9(char*)p2 + num);
//		}
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[30] = "abcdef";
//	void* ret = my_memmove(arr1, arr1+2,4);
//	//4个字节
//	printf("%s\n", ret);
//}


//#include<stdio.h>
//int main()
//{
//	arr[10] = { 1,2,3,4,5 };
//	test();
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}